<?php

class administrador_CampeonatoController extends Zend_Controller_Action {

    public function init() {
       // $this->view->timesDisponiveis = ...

    }

    public function indexAction() {
        // action body
    }

    public function cadastrarTimeAction()
    {
        $form = new Administrador_Form_CadastrarTime();
        $request = $this -> getRequest();
        $form->setAction($request->getRequestUri());

        if($request->isPost() && $form->isValid($request->getPost()))
        {
            $dados = $form->getValues();
            $this->view->dados = $dados;
            $time = new Application_Model_Time($dados['time']);
            $persistencia = new Application_Model_TimeMapper();
            $parabens = false;
            try
            {
                $persistencia->salvar($time);
                $parabens = true;
            }
            catch(Exception $ex)
            {
                if($ex->getCode() == 23000)
                    $parabens = false;
            }

            $this->view->time = $dados['time'];
            $this->view->form = $form;
            $this->view->parabens = $parabens;

            $redireciona = $request->getParam('voltaPara', null);
            var_export($redireciona);
            if (null != $redireciona && $parabens) {
                $this->_helper->redirector($redireciona);
            }

        }
        else {
            $this->view->form = $form;
        }
    }


    public function cadastrarCampeonatoAction() {
        $timeMapper = new Application_Model_TimeMapper();
        $form = new Administrador_Form_CadastrarCampeonato($timeMapper);
        $request = $this -> getRequest();
        $post = $request->getPost();

        if (array_key_exists('novo_time', $request->getPost())) {
                $this->_helper->redirector('cadastrar-time', null, null,
                        array('voltaPara' => 'cadastrar-campeonato'));
            }

        if($request->isPost() && $form->isValid($post))
        {
            $dados = $form->getValues();
            $this->view->dados = $dados;

            $nomeCampeonato = $dados['campeonato'].' - '.$dados['ano_campeonato'];
            $campeonato = new Application_Model_Campeonato($nomeCampeonato);
            $persistencia = new Application_Model_CampeonatoMapper();

            try
            {
                $persistencia->getDBTable()->getAdapter()->beginTransaction();
                $persistencia->salvar($campeonato);
                $times = $form->getValue('times_selecionados');

                foreach($times as $timeAtual)
                {
                    $persistencia->associaTime($campeonato,
                            new Application_Model_Time($timeAtual));
                }

                $persistencia->getDBTable()->getAdapter()->commit();

                $this->view->parabens = true;
            }
            catch(Exception $ex)
            {
                $persistencia->getDBTable()->getAdapter()->rollBack();
                if($ex->getCode() == 23000)
                    $this->view->parabens = false;
            }

            $this->view->time = $dados['campeonato'];
            $this->view->form = $form;
        } else {
            $this->view->form = $form;
        }
    }
}

